#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <map>
#include <queue>
#include <list>

#define sf(x) scanf("%d", &x)
#define pf(x) printf("%d", x)
#define pf2(x,y) printf("%d %d ", x,y)
#define sf2(x,y) scanf("%d %d", &x,&y)
#define sff(x) scanf("%lf", &x)
#define pff(x) printf("%lf ", x)
#define ENDL printf("\n")
#define pfl(x) printf("%I64d ", x)
#define sfl(x) scanf("%I64d", &x)

using namespace std;

typedef long long ll;

string s;
bool u[300];

ll dfs(int l, int r,char root,bool flag)
{
	if(l==r)return 1;
	ll ldfs, rdfs;
	long long  sum=0;
	if(s[l]==s[r])
	{
		sum+=dfs(l+1,r-1,s[l],flag);
		sum%=1000000000;
	}
	if(flag)
	{
		for(int i=l+1;i<r;i++)
		{
			if(s[i-1]==s[l]&&s[i]==root)
			{
				if(s[l]==s[r])
				{
					ldfs = 1;
					rdfs = dfs(i+1,r,root,true);
					sum+=ldfs*rdfs;
				}
				else
				{
					ldfs = 1;
					rdfs = dfs(i+1,r,root,true);
					sum+=ldfs*rdfs;
				}
				sum%=1000000000;
			}
		}
	}
	return sum%1000000000;
}

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	long long ans;
	cin>>s;
	if(s[0]!=s[s.size()-1] || s.size()%2 == 0)
	{
		printf("0\n");
		return 0;
	}
	else if(s.size()==1)
	{
		printf("1\n");
		return 0;
	}
	else
	{
		ans=dfs(1,s.length()-2,s[0],true);
	}
	printf("%I64d",ans);
	return 0;
}
